/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package vista.ejecucion;

import vista.planificacion.*;
import com.itextpdf.text.DocumentException;
import controlador.reportes.GestorReportesEjecucion;
import controlador.utiles.gestorBDvarios;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import modelo.Ejecucion;
import modelo.EmpresaCliente;
import modelo.PedidoObra;
import util.FechaUtil;
import util.SwingPanel;
import vista.reportes.ReportDesigner;
import vista.reportes.sources.InformeDeEjecucionEmpleadosEnObra;
import vista.reportes.sources.InformeDeEjecucionTareasARealizar;
import vista.reportes.sources.InformeDeEjecucionTareasXEmpleado;
import vista.reportes.sources.InformeDePlanificacion;
import vista.reportes.sources.InformeDePlanificacionTareasARealizar;
import vista.reportes.sources.InformeDePlanificacionTareasXEmpleado;
import vista.reportes.sources.InformeDePlanificaiconEmpleadosEnObra;

/**
 *
 * @author Administrador
 */
public class EmitirInformes extends javax.swing.JInternalFrame {
    
    private Ejecucion plan;
    private PedidoObra obra;
    
    /** Creates new form generarCotizacionExterna */
    public EmitirInformes(PedidoObra obra,Ejecucion plan) 
    {
        this.plan = plan;
        this.obra = obra;
        initComponents();
        lblLoad.setVisible(false);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        btnResumenPlanifiacion = new javax.swing.JButton();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jPanel2 = new javax.swing.JPanel();
        jLabel5 = new javax.swing.JLabel();
        btnListadoEmpleadosAsignados = new javax.swing.JButton();
        btnInformeTareasXEmpleado = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        jPanel3 = new javax.swing.JPanel();
        jLabel7 = new javax.swing.JLabel();
        btnListadoTareasPlanificadas = new javax.swing.JButton();
        jLabel6 = new javax.swing.JLabel();
        btnCerrar = new javax.swing.JButton();
        lblLoad = new javax.swing.JLabel();

        setClosable(true);
        setResizable(true);
        setTitle("Generar Informes de Ejecucion");

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Resumen de la Ejecucion"));

        btnResumenPlanifiacion.setIcon(new javax.swing.ImageIcon(getClass().getResource("/res/iconos/plantillas/x-dia-diagram.png"))); // NOI18N
        btnResumenPlanifiacion.setText("Resumen de la Ejecucion");
        btnResumenPlanifiacion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnResumenPlanifiacionActionPerformed(evt);
            }
        });

        jLabel2.setText("Este informe pretende detallar los datos de la ejecucion realizada sobre la obra. En el se listan tareas");

        jLabel3.setText(" y subtareas con los diferentes recursos asociados. Además se adicionan fechas de inicio y fin de cada una");

        jLabel4.setText(" de ellas, descripciones, esfuerzo requerido y un breve listado con los empleados asociados a la obra.");

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(btnResumenPlanifiacion, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addComponent(jLabel2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel3)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel4)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnResumenPlanifiacion))
        );

        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Informes de Empleados en esta Ejecucion"));

        jLabel5.setText("Muestra una lista simple \"con los nombres, telefonos y mails\" de los empleados que participan en ");

        btnListadoEmpleadosAsignados.setIcon(new javax.swing.ImageIcon(getClass().getResource("/res/iconos/plantillas/msn.png"))); // NOI18N
        btnListadoEmpleadosAsignados.setText("Listado de Empleados Asignados a la Obra");
        btnListadoEmpleadosAsignados.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnListadoEmpleadosAsignadosActionPerformed(evt);
            }
        });

        btnInformeTareasXEmpleado.setIcon(new javax.swing.ImageIcon(getClass().getResource("/res/iconos/plantillas/msn.png"))); // NOI18N
        btnInformeTareasXEmpleado.setText("Informe de Tareas por Empleados");
        btnInformeTareasXEmpleado.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnInformeTareasXEmpleadoActionPerformed(evt);
            }
        });

        jLabel1.setText("la obra. Los mismos pueden ser agrupados por tareas");

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
                        .addComponent(btnInformeTareasXEmpleado)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnListadoEmpleadosAsignados, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                .addContainerGap())
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addComponent(jLabel5)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnInformeTareasXEmpleado)
                    .addComponent(btnListadoEmpleadosAsignados, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Informe de Tareas"));

        jLabel7.setText("Muestra una lista simple \"con los nombres\" de las tareas a realizar y las horas de esfuerzo invertidos en cada");

        btnListadoTareasPlanificadas.setIcon(new javax.swing.ImageIcon(getClass().getResource("/res/iconos/plantillas/tarea.png"))); // NOI18N
        btnListadoTareasPlanificadas.setText("Listado de Tareas");
        btnListadoTareasPlanificadas.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnListadoTareasPlanificadasActionPerformed(evt);
            }
        });

        jLabel6.setText("una y algunos datos extras de interés.");

        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel7, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(btnListadoTareasPlanificadas, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jLabel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );
        jPanel3Layout.setVerticalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addComponent(jLabel7)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel6)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnListadoTareasPlanificadas)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        btnCerrar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/res/iconos/var/16x16/block.png"))); // NOI18N
        btnCerrar.setText("Cerrar");
        btnCerrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCerrarActionPerformed(evt);
            }
        });

        lblLoad.setIcon(new javax.swing.ImageIcon(getClass().getResource("/res/imagenes/loader.gif"))); // NOI18N
        lblLoad.setText("Generando, Espere por favor ...");
        lblLoad.setDoubleBuffered(true);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jPanel3, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jPanel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(lblLoad, javax.swing.GroupLayout.PREFERRED_SIZE, 235, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(btnCerrar)))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap(23, Short.MAX_VALUE)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnCerrar)
                    .addComponent(lblLoad))
                .addGap(7, 7, 7))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

private void btnInformeTareasXEmpleadoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnInformeTareasXEmpleadoActionPerformed
    showLoading();
    btnInformeTareasXEmpleado.setEnabled(false);
    esperarWorkArround();
    // Acá tu código ...
//    EmitirInformeSeleccionEmpleados win = new EmitirInformeSeleccionEmpleados();
//    SwingPanel.getInstance().addWindow(win);
//    win.setVisible(true);
    
    InformeDeEjecucionTareasXEmpleado iptxe = new InformeDeEjecucionTareasXEmpleado(this.plan);
    iptxe.setNombreReporte("Listado de Tareas por Empleado");
    iptxe.setNombreArchivo("Planificacion-TareasPorEmpleado-"+this.plan.getId(),ReportDesigner.REPORTE_TIPO_PLANIFICACION);

        HashMap<String,Object> params = new HashMap<String, Object>();
        // Carga los datos comunes a todos los informes
        cargarDatosCabecera(params);

    try {
        iptxe.makeAndShow(params);
    } catch (DocumentException ex) {
        mostrarMensaje(JOptionPane.ERROR_MESSAGE,"Error!","No se pudo crear el informe\nVerifique los datos e intentelo nuevamente");
    } catch (FileNotFoundException ex) {
        mostrarMensaje(JOptionPane.ERROR_MESSAGE,"Error!","No se pudo crear el archivo donde guardar el informe");
    }
    // ...
    hideLoading();
    btnInformeTareasXEmpleado.setEnabled(true);
}//GEN-LAST:event_btnInformeTareasXEmpleadoActionPerformed

private void btnResumenPlanifiacionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnResumenPlanifiacionActionPerformed
    showLoading();
    // Acá tu código ...
        GestorReportesEjecucion gestorReportes = new GestorReportesEjecucion();
        gestorReportes.emitirResumenEjecucion(plan);
    // ...
    hideLoading();
}//GEN-LAST:event_btnResumenPlanifiacionActionPerformed

private void btnListadoTareasPlanificadasActionPerformed(java.awt.event.ActionEvent evt) {                                                              
    showLoading();
    btnListadoTareasPlanificadas.setEnabled(false);
    esperarWorkArround();
    // Acá tu código ...
        
        InformeDeEjecucionTareasARealizar informe = new InformeDeEjecucionTareasARealizar(plan);
        informe.setNombreReporte("Listado de Tareas Planificadas");
        informe.setNombreArchivo("Planificacion-Tareas-"+this.plan.getId(),ReportDesigner.REPORTE_TIPO_PLANIFICACION);
        
            HashMap<String,Object> params = new HashMap<String, Object>();
            // Carga los datos comunes a todos los informes
            cargarDatosCabecera(params);
        
        try {
            informe.makeAndShow(params);
        } catch (DocumentException ex) {
            mostrarMensaje(JOptionPane.ERROR_MESSAGE,"Error!","No se pudo crear el informe\nVerifique los datos e intentelo nuevamente");
        } catch (FileNotFoundException ex) {
            mostrarMensaje(JOptionPane.ERROR_MESSAGE,"Error!","No se pudo crear el archivo donde guardar el informe");
        }
        
    // ...
    hideLoading();
    btnListadoTareasPlanificadas.setEnabled(true);
}                                                             

private void btnListadoEmpleadosAsignadosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnListadoEmpleadosAsignadosActionPerformed
    
    showLoading();
    btnListadoEmpleadosAsignados.setEnabled(false);
    esperarWorkArround();
    // Acá tu código ...
        
        InformeDeEjecucionEmpleadosEnObra ceg = new InformeDeEjecucionEmpleadosEnObra(this.plan);
        ceg.setNombreReporte("Listado de Empleados Asignados a la Obra");
        ceg.setNombreArchivo("Planificacion-EmpleadosAsignadosEnObra-"+this.plan.getId(),ReportDesigner.REPORTE_TIPO_PLANIFICACION);
        
            HashMap<String,Object> params = new HashMap<String, Object>();
            // Carga los datos comunes a todos los informes
            cargarDatosCabecera(params);
        
        try {
            ceg.makeAndShow(params);
        } catch (DocumentException ex) {
            mostrarMensaje(JOptionPane.ERROR_MESSAGE,"Error!","No se pudo crear el informe\nVerifique los datos e intentelo nuevamente");
        } catch (FileNotFoundException ex) {
            mostrarMensaje(JOptionPane.ERROR_MESSAGE,"Error!","No se pudo crear el archivo donde guardar el informe");
        }
        
    // ...
    hideLoading();
    btnListadoEmpleadosAsignados.setEnabled(true);
}//GEN-LAST:event_btnListadoEmpleadosAsignadosActionPerformed

    private void btnCerrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCerrarActionPerformed
        this.dispose();
    }//GEN-LAST:event_btnCerrarActionPerformed


private void showLoading()
{
    lblLoad.setVisible(true);
    this.repaint();
    lblLoad.repaint();
    this.pack();
    lblLoad.repaint();
    
}

private void hideLoading()
{
    lblLoad.setVisible(false);
    this.repaint();
}


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnCerrar;
    private javax.swing.JButton btnInformeTareasXEmpleado;
    private javax.swing.JButton btnListadoEmpleadosAsignados;
    private javax.swing.JButton btnListadoTareasPlanificadas;
    private javax.swing.JButton btnResumenPlanifiacion;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JLabel lblLoad;
    // End of variables declaration//GEN-END:variables

    private void esperarWorkArround() {
        try {
            // Acá tu código ...
                Thread.sleep(2000);
        } catch (InterruptedException ex) {
            System.out.println("");
        }
    }

    
    /**
     * Muestra un mensaje
     * @param tipo
     * @param titulo
     * @param mensaje 
     */
    public void mostrarMensaje(int tipo,String titulo,String mensaje)
    {
         JOptionPane.showMessageDialog(this.getParent(),mensaje,titulo,tipo);
    } 
    
    /**
     * Carga los datos que son comunes a todos los informes de planificacion
     * @param params 
     */
    private void cargarDatosCabecera(HashMap<String,Object> params)
    {
        params.put(InformeDePlanificacion.PARAM_PLAN_NRO,this.plan.getNroCotizacionPlanificada());
            
        gestorBDvarios utils = new gestorBDvarios();
        EmpresaCliente ec = utils.buscarEmpresaCliente(this.obra.getPlanta());

        if(ec==null)
        {
            params.put(InformeDePlanificacion.PARAM_PLAN_EMPRESA,"");
        }
        else
        {
            params.put(InformeDePlanificacion.PARAM_PLAN_EMPRESA,ec.toString());
        }
        if(this.obra.getPlanta()!=null)
        {
            params.put(InformeDePlanificacion.PARAM_PLAN_PLANTA,this.obra.getPlanta().toString());
        }
        else
        {
            params.put(InformeDePlanificacion.PARAM_PLAN_PLANTA,"");
        }
        
        params.put(InformeDePlanificacion.PARAM_PLAN_OBRA,this.obra.getNombre());
        
        params.put(InformeDePlanificacion.PARAM_PLAN_FINICIO,FechaUtil.getFecha(this.plan.getFechaInicio()));
        
        params.put(InformeDePlanificacion.PARAM_PLAN_FFIN,FechaUtil.getFecha(this.plan.getFechaInicio()));
    }
}
